package com.enums.menu;

import com.onjava.Enums;
import com.sun.org.apache.xerces.internal.dom.PSVIAttrNSImpl;

import java.security.Security;

/**
 * @author ANG.YU
 * 将⼀个 enum 嵌套在另⼀个enum 内
 */
@SuppressWarnings("all")
public enum SecurityCategory {
    STOCK(Security.Stock.class),
    BOND(Security.Bond.class);
    Security[] values;

    SecurityCategory(Class<? extends Security> kind) {
        this.values = kind.getEnumConstants();
    }

    public Security randomSelection() {
        return Enums.random(values);
    }

    /**
     * Security 接⼝的作⽤是将其所包含的 enum 组合成⼀个公共类型，这⼀点
     * 是有必要的。然后，SecurityCategory 才能将 Security 中的 enum 作为其
     * 构造器的参数使⽤，
     */
    interface Security {
        enum Stock implements Security {
            SHORT, LONG, MARGIN
        }

        enum Bond implements Security {
            MUNICIPAL, JUNK
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            SecurityCategory category = Enums.random(SecurityCategory.class);
            System.out.println(category + ": " + category.randomSelection());
        }
    }
}
